package com.scott.crm.resume.service.impl;

import com.scott.crm.resume.bean.QuestionBean;
import com.scott.crm.resume.dao.QuestionDao;
import com.scott.crm.resume.service.QuestionService;
import com.scott.crm.resume.utils.QuestionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

@Service
public class QuestionServiceImpl implements QuestionService {

    @Autowired
    private QuestionDao questionDao;

    /**
     * 方法描述: 【学生】 新增一个面试问题
     * @author: 黄德标
     * @date: 2021/11/20 19:37
     * @params: [questionEntity]
     * @returns: 返回1 则添加成功
     */
    @Override
    public Integer addQuestion(QuestionBean questionBean){
        return questionDao.addQuestion(questionBean);
    }


    /**
     * 方法描述: 【老师】 填写 学生的面试问题 的老师答案
     * @author: 黄德标
     * @date: 2021/11/29 21:03
     * @param: QuestionBean对象必须有id、teacherAnswer、token属性
     */
    @Override
    public Integer addQuestionTeacherAnswer(QuestionBean questionBean) {
        return questionDao.addQuestionTeacherAnswer(questionBean);
    }

    /**
     * 方法描述: 根据面试问题的ID，从面试问题表中删除一条记录
     * @author: 黄德标
     * @date: 2021/11/20 21:01
     * @params: questionBean对象 必须有id、token
     * @returns:
     * 返回-1：身份验证失败，token有误
     * 返回1： 删除成功
     */
    @Override
    public Integer deleteQuestionByQuestionId(QuestionBean questionBean){
        Integer questionId = questionBean.getId();
        Integer userId = null;
        // 获得令牌
        String token = questionBean.getToken();
        Integer rs = QuestionUtils.DecryptUserId(token);
        if (rs == -1){
            return -1;
        }else {
            userId = rs;
        }
        // 判断此问题是否存在
        // 判断此问题的id是否为此学生录入的
        // 判断此问题是否有老师填写的答案，有则不允许删除

        return questionDao.deleteQuestionByQuestionId(questionId);
    }

    /**
     * 方法描述: 根据 questionBean参数中的 id 进行修改内容（只能更新面试问题和学生的回答）
     * @author: 黄德标
     * @date: 2021/11/20 20:41
     * @params: [questionEntity]
     * @returns: 返回1 则修改成功
     */
    @Override
    public Integer updateQuestion(QuestionBean questionBean){
        return questionDao.updateQuestion(questionBean);
    }

    /**
     * 方法描述: 根据 ID 查询 面试问题表中的记录
     * @author: 黄德标
     * @date: 2021/11/20 21:21
     * @params: [QuestionId]
     * @returns: QuestionEntity对象
     */
    @Override
    public QuestionBean selectQuestionBeanByQuestionId(Integer QuestionId){
        return questionDao.selectQuestionBeanByQuestionId(QuestionId);
    }

    /**
     * 方法描述: 根据 resumeID 查询 面试问题表中的记录
     * @author: 黄德标
     * @date: 2021/11/20 21:49
     * @params: [resumeId]
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectQuestionBeanByResumeId(Integer resumeId){
        return questionDao.selectQuestionBeanByResumeId(resumeId);
    }

    /**
     * 方法描述: 根据 studentId 查询 面试问题表中的记录
     * @author: 黄德标
     * @date: 2021/11/20 22:00
     * @params: [studentId]
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectQuestionBeanByStudentId(Integer studentId){
        return questionDao.selectQuestionBeanByStudentId(studentId);
    }

    /**
     * 方法描述: 根据 学生的班级ID 查询 此班 所有的学生 的面试问题表中的记录
     * @author: 黄德标
     * @date: 2021/11/20 22:23
     * @params: [classId]
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectQuestionBeanByClassId(Integer classId){
        return questionDao.selectQuestionBeanByClassId(classId);
    }

    /**
     * 方法描述: 根据 老师的id 查询 此班 所有的学生 的面试问题表中的记录
     * @author: 黄德标
     * @date: 2021/11/25 22:23
     * @params: [classId]
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectQuestionBeanByTeacherId(Integer teacherId) {
        return null;
    }

    /**
     * 方法描述: 根据 班级ID 查询 此班 所有的学生 的面试问题表中 老师还未填写答案 的记录
     * @author: 黄德标
     * @date: 2021/11/21 15:35
     * @params: [classId]
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectNullTeacherAnswerQuestionBeanByClassId(Integer classId){
        return questionDao.selectNullTeacherAnswerQuestionBeanByClassId(classId);
    }

    /**
     * 方法描述: 根据 老师ID 查询 已经填写过答案 的面试问题表中的记录
     * @author: 黄德标
     * @date: 2021/11/21 15:20
     * @params: [teacherId]
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectNotNullTeacherAnswerQuestionBeanByClassId(Integer teacherId){
        return questionDao.selectNotNullTeacherAnswerQuestionBeanByClassId(teacherId);
    }

    /**
     * 方法描述: 查询 面试问题表 所有记录
     * @author: 黄德标
     * @date: 2021/11/20 22:22
     * @returns: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectAll(){
        return questionDao.selectAll();
    }

    /**
     * 方法描述: 查询 用户的班级【老师学生通用】
     * @author: 黄德标
     * @date: 2021/11/29 20:39
     * @param: [java.lang.Integer]
     * @return: java.lang.Integer
     */
    @Override
    public Integer selectClassIdByUserId(Integer userId) {
        return questionDao.selectClassIdByUserId(userId);
    }

    /**
     * 方法描述: 查询 用户的班级的 所有面试问题
     * @author: 黄德标
     * @date: 2021/11/29 20:47
     * @param: [java.lang.Integer]
     * @return: 装有QuestionBean对象的集合
     */
    @Override
    public ArrayList<QuestionBean> selectQuestionBeanByUserId(Integer userId) {
        Integer classId = selectClassIdByUserId(userId);
        return questionDao.selectQuestionBeanByClassId(classId);
    }
}
